﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Data.OleDb;

namespace DiaryPlanner
{

    
    public partial class Memo : UserControl
    {

        public ArrayList MemoList = new ArrayList();
        public MemoPost nowMemoPost;

        Color yellow = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
        Color blue = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
        Color green = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(128)))));
        Color pink = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192)))));


        public Memo()
        {
            InitializeComponent();
            initMemo_db();
        }

        //private void btnMemoNew_Click(object sender, EventArgs e)
        //{
           
        //}

        public void viewAllMemo(){ //MemoList에 있는 메모들을 나열해준다.
        
            //memosize 216*276

            MemoPanel.Controls.Clear();
            int count=MemoList.Count;

            foreach (MemoPost mp in MemoList)
            {
                count--;
                MemoPost nmp = mp;
                                
                //mp.memoText.BackColor = System.Drawing.Color.Yellow;
                MemoPanel.Controls.Add(mp);
                mp.Location = new Point(6+222*(count%3), 6+282*(count/3));
                               
            }

        }

        private void btnNewMemo_Click(object sender, EventArgs e)
        {
            MemoNew MemoNewObject = new MemoNew(this);//새 메모를 입력하는 다이얼로그
            MemoNewObject.ShowDialog();

        }

        private void initMemo_db()
        {
            try //예외처리문
            {
                string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" //연결하는 객체의 공급자명(확장자명)
                                        + "data source = "  //데이터 소스=(경로입력하라는거)
                                        + Application.StartupPath ///상대경로 읽어옴
                                        + @"\diaryplannerdb.mdb";//실제 데이터베이스 파일이름

                string commandString = "Select * from [memos]";//memos테이블에 있는 모든필드들을 모두 검색해라.

                OleDbDataAdapter DBAdapter ////DataSet을 채우고 데이터 소스를 업데이트하는 데 사용되는 데이터 명령 집합 및 데이터베이스 연결하게 하는 함수
                    = new OleDbDataAdapter(commandString, connectionString);//connectionString이라는 경로와 쿼리명령을 동적할당

                OleDbCommandBuilder myCommandBuilder ///연결된 데이터베이스에서 DataSet의 변경 내용을 조정하는 데 사용되는 단일 테이블 명령을 자동으로 생성합니다
                    = new OleDbCommandBuilder(DBAdapter);

                DataSet DS = new DataSet(); //DS라는 데이터 셋 동적할당

                DBAdapter.Fill(DS, "memos"); //DS라는 데이터셋에 새로운 memos 테이블에 추가 또는 갱신하겠다고 알림.

                DataTable aTable = DS.Tables["memos"];//home테이블을 불러와 aTable을 새로 생성해서 저장

                for (int i = 0; i < aTable.Rows.Count; i++ )
                {
                    add_memo(aTable.Rows[i].ItemArray[0].ToString(), aTable.Rows[i].ItemArray[1].ToString(), aTable.Rows[i].ItemArray[4].ToString());
                }
            }
            catch (DataException DE) //DataException에러 발생확인하는 catch문
            {
                MessageBox.Show(DE.Message); //DataExpception 에러 발생시 메세지박스로 에러값을 출력해라.
            }
            catch (Exception DE) //Exception에러 발생확인하는 catch문
            {
                MessageBox.Show(DE.Message);//Expception 에러 발생시 메세지박스로 에러값을 출력해라.
            }
        }

        private void add_memo(string date, string memo, string color)
        {
            MemoPost thisMemoPost = new MemoPost(this);
            thisMemoPost.memoDate.Text = date;
            thisMemoPost.ResetText();
            thisMemoPost.memoText.Text = memo;
            thisMemoPost.color = int.Parse(color);

            switch (thisMemoPost.color)
            {
                case 0:
                    thisMemoPost.memoText.BackColor = yellow;
                    thisMemoPost.memoDate.BackColor = yellow;
                    thisMemoPost.BackColor = yellow;

                    break;
                case 1:
                    thisMemoPost.memoText.BackColor = blue;
                    thisMemoPost.memoDate.BackColor = blue;
                    thisMemoPost.BackColor = blue;
                    break;
                case 2:
                    thisMemoPost.memoText.BackColor = green;
                    thisMemoPost.memoDate.BackColor = green;
                    thisMemoPost.BackColor = green;
                    break;
                case 3:
                    thisMemoPost.memoText.BackColor = pink;
                    thisMemoPost.memoDate.BackColor = pink;
                    thisMemoPost.BackColor = pink;
                    break;
            }

            this.MemoList.Add(thisMemoPost);//memopost 배열에 추가
            this.viewAllMemo();
        }

        
    }
}
